package handler

import (
	"context"
	"encoding/json"
	"fmt"
	"getCaptcha/model"
	"getCaptcha/proto"
	"github.com/afocus/captcha"
	"image/color"
)

type GetCaptcha struct{}

// New Return a new handler
func New() *GetCaptcha {
	return &GetCaptcha{}
}

// Call is a single request handler called via client.Call or the generated client code
// Call(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error)

func (e *GetCaptcha) Call(ctx context.Context, req *getCaptcha.Request) (*getCaptcha.Response, error) {

	// 生成图片验证码

	//初始化对象
	cap := captcha.New()

	// 设置字体
	cap.SetFont("./conf/comic.ttf")
	// 设置验证码大小
	cap.SetSize(128, 64)
	// 设置干扰强度
	cap.SetDisturbance(captcha.NORMAL)
	// 设置前景色 可以多个 随机替换文字颜色 默认黑色
	cap.SetFrontColor(color.RGBA{255, 255, 255, 255})
	// 设置背景色 可以多个 随机替换背景色 默认白色
	cap.SetBkgColor(color.RGBA{255, 0, 0, 255}, color.RGBA{0, 0, 255, 255}, color.RGBA{0, 153, 0, 255})

	// 生成字体
	img, str := cap.Create(4, captcha.NUM)

	// 存储图片验证码到redis中
	err := model.SaveImgCode(req.Uuid, str)
	if err != nil {
		return nil, err
	}
	// 将生成的图片序列化
	imgBuf, err := json.Marshal(img)
	if err != nil {
		fmt.Println("验证码生成失败")
		return nil, err
	}
	fmt.Println("微服务（图片验证码）被调用成功。")

	return &getCaptcha.Response{
		Img: imgBuf,
	}, nil
}
